﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

/*
*1. 设计立方体类（Cube），求出立方体的面积（2*a*b + 2*a*c + 2*b*c）和体积（ a*b*c ），
* 分别用全局函数和成员函数判断两个两个立方体是否相等；
*/
class Cube
{
public:
	//3.设置和获取长，宽，高；
	void setL(int l)
	{
		m_L = l;
	}
	int getL()const
	{
		return m_L;
	}

	void setW(int w)
	{
		m_W = w;
	}
	int getW()
	{
		return m_W;
	}

	void setH(int h)
	{
		m_H = h;
	}
	int getH()
	{
		return m_H;
	}

	//4.求立方体的面积；
	void getCubeS()
	{
		int s = 2 * m_L * m_W + 2 * m_L * m_H + 2 * m_W * m_H;
		cout << "5.立方体的面积为：" << s << endl;
	}

	//6.求立方体的体积；
	void getCubeV()
	{
		int v = m_L * m_W * m_H;
		cout << "7.立方体的体积为：" << v << endl;
	}

	//10.通过成员函数判断是否相等；
	bool compareCubeByClass(Cube& cub)
	{
		bool ret = m_L == cub.getL() && m_W == cub.getW() && m_H == cub.getH();
		return ret;
	}

private:
	//2.长，宽，高；
	int m_L;
	int m_W;
	int m_H;

};
//8.全局函数判断，两个立方体是否相等；
bool compareCube(Cube& cub1, Cube& cub2)
{
	if (cub1.getL() == cub2.getL() && cub1.getW() == cub2.getW() && cub1.getH() == cub2.getH())
	{
		return true;
	}
	return false;
}
//12.加了const可以保证成员不被修改，getL()加了const，可以保证成员函数不能修改成员属性；
void funcConst(const Cube& cub)
{
	cub.getL();
}
void testCube()
{
	Cube c1;
	c1.setL(10);
	c1.setW(10);
	c1.setH(10);

	c1.getCubeS();//600
	c1.getCubeV();//1000

	//9.通过全局函数判断两个立方体是否相等；
	Cube c2;
	c2.setL(10);
	c2.setW(10);
	c2.setH(11);//10 --> 11

	bool ret = compareCube(c1, c2);
	if (ret)
	{
		cout << "c1和c2是相等的！" << endl;
	}
	else
	{
		cout << "c1和c2是不相等的！" << endl;
	}

	//11.通过成员函数判断立方体是否相等；
	bool retClass = c1.compareCubeByClass(c2);
	if (retClass)
	{
		cout << "通过成员函数判断：：c1和c2是相等的！" << endl;
	}
	else
	{
		cout << "通过成员函数判断：：c1和c2是不相等的！" << endl;
	}
}

//main255：案例：面向对象设计立方体类判断是否相同
int main255()
{
	testCube();//c1和c2是相等的！ --> c1和c2是不相等的！
	//通过成员函数判断：：c1和c2是相等的！ --> 通过成员函数判断：：c1和c2是不相等的！

	system("pause");
	return EXIT_SUCCESS;
}